﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PerfectBuyMVC.Models;

namespace PerfectBuyMVC.Controllers
{
    public class CarritoComprasController : Controller
    {
        private string _mensaje = "";

        public ActionResult CarritoCompras()
        {
            if (Request.Params["idProducto"] == null)
            {
                return View();
            }

            int idProducto = int.Parse(Request.Params["idProducto"]);

            PerfectBuyData.perfectbuyEntities context = new PerfectBuyData.perfectbuyEntities();
            PerfectBuyData.Articulo articulo = context.Articulos.FirstOrDefault(a => a.id == idProducto);

            List<PerfectBuyData.CarritoArticulo> lstArticulosCarrito = (List<PerfectBuyData.CarritoArticulo>)Session["carrito"];

            bool encontrado = false;
            foreach (PerfectBuyData.CarritoArticulo arti in lstArticulosCarrito)
            {
                if (arti.Articulo.id == idProducto)
                {
                    arti.cantidad++;
                    encontrado = true;
                    break;
                }
            }

            if (!encontrado)
            {
                PerfectBuyData.CarritoArticulo carrArticulo = new PerfectBuyData.CarritoArticulo();
                carrArticulo.Articulo = articulo;
                carrArticulo.cantidad = 1;
                lstArticulosCarrito.Add(carrArticulo);
            }

            ViewBag.Message = _mensaje;

            return View();
        }

        public void Eliminar()
        {
            if (Request.Params["idArticulo"] != null)
            {
                int idArticulo = int.Parse(Request.Params["idArticulo"]);
                List<PerfectBuyData.CarritoArticulo> carrito = (List<PerfectBuyData.CarritoArticulo>)Session["carrito"];
                foreach (PerfectBuyData.CarritoArticulo arti in carrito)
                {
                    if (arti.Articulo.id == idArticulo)
                    {
                        carrito.Remove(arti);
                        break;
                    }
                }
            }
        }

        public ActionResult Editar()
        {
            if (Request.Params["idArticulo"] != null && Request.Params["cantidad"] != null)
            {
                List<PerfectBuyData.CarritoArticulo> carrito = (List<PerfectBuyData.CarritoArticulo>)Session["carrito"];
                int idArticulo = int.Parse(Request.Params["idArticulo"]);
                int cantidad = int.Parse(Request.Params["cantidad"]);

                PerfectBuyData.perfectbuyEntities context = new PerfectBuyData.perfectbuyEntities();
                PerfectBuyData.Articulo articulo = context.Articulos.FirstOrDefault(a => a.id == idArticulo);

                ViewBag.Message = "";

                if (articulo.cantidad < cantidad)
                {
                    //Mostrar algun error
                    _mensaje = "La cantidad supera el límite disponible";
                    ViewBag.Message = _mensaje;
                }
                else
                {
                    foreach (PerfectBuyData.CarritoArticulo artCarrito in carrito)
                    {
                        if (artCarrito.Articulo.id == idArticulo)
                        {
                            artCarrito.cantidad = cantidad;
                            break;
                        }
                    }
                }
            }

            return Content(_mensaje);
        }


        public ActionResult Pagar()
        {
            if (Session["Usuario"] == null)
            {
                return RedirectToAction("Login", "Login");

            }
            else
            {
                return View();
            }
        }

        public ActionResult PagoRealizado()
        {

            PerfectBuyData.Usuario usuario = (PerfectBuyData.Usuario)Session["Usuario"];

            decimal totalCompra = 0;

            PerfectBuyData.perfectbuyEntities context = new PerfectBuyData.perfectbuyEntities();

            List<PerfectBuyData.CarritoArticulo> lstArticulosSesion = (List<PerfectBuyData.CarritoArticulo>)Session["carrito"];

            PerfectBuyData.CarritoCompra carritoCompra = new PerfectBuyData.CarritoCompra();

            List<PerfectBuyData.CarritoArticulo> lstArticulos = new List<PerfectBuyData.CarritoArticulo>();
            PerfectBuyData.CarritoArticulo articuloL = null;

            foreach (PerfectBuyData.CarritoArticulo arti in lstArticulosSesion)
            {
                articuloL = new PerfectBuyData.CarritoArticulo();
                articuloL.cantidad = arti.cantidad;
                articuloL.idArticulo = arti.Articulo.id;
                articuloL.precio = arti.Articulo.precio;

                totalCompra += arti.Articulo.precio;

                lstArticulos.Add(articuloL);
            }

            carritoCompra.CarritoArticulos = lstArticulos;
            carritoCompra.idUsuario = usuario.idUsuario;
            carritoCompra.precio = totalCompra;
            carritoCompra.fecha = DateTime.Now;

            context.CarritoCompras.Add(carritoCompra);
            context.SaveChanges();

            foreach (PerfectBuyData.CarritoArticulo arti in lstArticulosSesion)
            {
                PerfectBuyData.Articulo articuloUpdate = context.Articulos.FirstOrDefault(e => e.id == arti.Articulo.id);
                if (articuloUpdate != null)
                {
                    articuloUpdate.cantidad -= arti.cantidad;
                    context.SaveChanges();
                }
            }

            Session["carrito"] = new List<PerfectBuyData.CarritoArticulo>();

            return View();
        }
    }
}

